//提取ip相关信息
// 接口：https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=要查询的ip地址
//给一个ip地址，可以通过该接口获取到省份和运营商
//实现一个ip查询功能
//用户输入一个ip地址，将查询到的结果显示给用户
//并将结果用以下格式写入到文件：ip,国家,省份,运营商
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)

type IPInfo struct {
	Code int `json:"code"`
	Data struct {
		Country  string `json:"country"`
		Province string `json:"region"`
		ISP      string `json:"isp"`
	} `json:"data"`
}

func queryIP(ip string) (*IPInfo, error) {
	url := "https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=" + ip
	resp, err := http.Get(url)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}

	var result IPInfo
	err = json.Unmarshal(body, &result)
	if err != nil {
		return nil, err
	}

	return &result, nil
}

func main() {
	fmt.Print("请输入要查询的IP地址：")
	var ip string
	fmt.Scanln(&ip)

	info, err := queryIP(ip)
	if err != nil {
		fmt.Println("查询失败：", err)
		return
	}

	fmt.Printf("国家：%s\n省份：%s\n运营商：%s\n", info.Data.Country, info.Data.Province, info.Data.ISP)

	filePath := "ip_info.txt"
	file, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
	if err != nil {
		fmt.Println("写入文件失败：", err)
		return
	}
	defer file.Close()

	result := fmt.Sprintf("%s,%s,%s,%s\n", ip, info.Data.Country, info.Data.Province, info.Data.ISP)
	_, err = file.WriteString(result)
	if err != nil {
		fmt.Println("写入文件失败：", err)
		return
	}

	fmt.Println("查询结果已写入文件：", filePath)
}

